談完了控制反轉,怎麼能丟下依賴注入呢?
依賴注入(Dependency Injection,DI),是控制反轉的一種實現方式,用於管理對象、組件之間的依賴關係。在依賴注入的設計模式下,依賴關係不再由被依賴的對象本身來創建或尋找,而是由外部容器或框架注入給被依賴的對象,也可以說是提供。
還是以昨天的例子來假設,我們有一個廚房,有一位廚師來做菜。在傳統的方式下,我們可能會這樣實現:
public class Kitchen {
private Chef chef;
public Kitchen() {
this.chef = new Chef();
}
public void cook(String food) {
chef.cooking(food);
}
}
在這個廚房中,Kitchen
對 Chef
有硬性的依賴,並在自己的構造函數中訓練出一位新的 Chef
。這樣的實現方式存在以下問題:
Kitchen
與 Chef
緊密耦合,難以替換或替這位廚師增加新技能。Chef
會導致難以測試 Kitchen
的運作。現在,讓我們使用依賴注入來改善這個問題:
public class Kitchen {
private Chef chef;
public Kitchen(Chef chef) {
this.chef = chef;
}
public void cook(String food) {
chef.cooking(food);
}
}
現在,Kitchen
不再自己訓練 Chef
了!!,而是在構造函數中接受一個 Chef
實例作為參數,等於從外面找一位廚師進來!!這就是依賴注入!!我們將 Chef
的依賴關係注入 Kitchen
當中!
這樣的實現方式有以下好處:
Kitchen
不再與特定的 Chef
高度耦合,您可以輕鬆替換 Chef
以獲得更多料理方式!Chef
,並注入到 Kitchen
中,以進行試營運!今日總結,依賴注入是一種實現控制反轉的設計模式,它有助於改善程式的可維護性、可擴展性和測試性,並減少對象之間的耦合度。不曉得來到此處得顧客有沒有瞭解了呢!?
https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
https://en.wikipedia.org/wiki/Dependency_injection